﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Platform.ObjectModel;
using Platform.ObjectModel.Design;
using Platform.ObjectModel.Validation;

namespace Platform.Resources
{
	internal static class Exceptions
	{

		public static Exception SchemaNotFound( DataObjectName name )
		{
			return new InvalidOperationException( String.Format( "O schema \"{0}\" não foi encontrado.", name.FullName ) );
		}

		public static Exception DocumentNotFound( DocumentToken token )
		{
			return new InvalidOperationException( String.Format( "O documento (\"{0}\") não existe na biblioteca.", token.Value ) );
		}

		public static Exception FieldNotFoundInSchema( string name )
		{
			return new KeyNotFoundException( String.Format( "Não foi possível encontrar o campo \"{0}\" no schema do documento.", name ) );
		}

		public static Exception InvalidFieldType( FieldDescriptor field, DataObjectName schema )
		{
			return new InvalidOperationException( String.Format( "Não foi possível determinar o tipo do campo \"{0}\".", schema.GroupWith( field.QualifiedName ) ) );
		}

		public static Exception ValidationResultError( ValidationResult result )
		{
			return new InvalidOperationException( "Erro de validação" );
		}

		public static Exception TypeIsNotDocument( Type t )
		{
			return new InvalidOperationException( String.Format( "O tipo \"{0}\" não herda da classe \"{1}\".", t.FullName, typeof( DocumentFlake ).FullName ) );
		}


		public static Exception DocumentTypeConstructorIsInvalid( Type type )
		{
			return new InvalidOperationException( String.Format( "O tipo \"{0}\" não possui construtor sem parâmetros.", type.FullName ) );
		}

        public static Exception MapReduceBagNotInitialized()
        {
            return new InvalidOperationException();
        }
	}
}
